package com.yami.shop.im.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.model.ShopDetail;
import com.yami.shop.bean.model.User;
import com.yami.shop.im.bean.ImMsgBizUserHistory;
import com.yami.shop.im.param.MessageInfo;
import com.yami.shop.im.vo.MsgItem;
import com.yami.shop.security.multishop.model.YamiShopUser;
import com.yami.shop.security.platform.model.YamiSysUser;
import com.yami.shop.sys.common.model.ShopEmployee;
import com.yami.shop.sys.common.model.SysUser;

import java.util.List;

/**
 * @author LZK
 * @date 2021-04-01 17:22:48
 */
public interface ImMsgBizUserHistoryService extends IService<ImMsgBizUserHistory> {

    /**
     * 保存聊天记录
     *
     * @param sendType   聊天类型
     * @param bizId      平台或店铺id
     * @param userId     用户id
     * @param employeeId 员工id
     * @param type       消息类型
     * @param content    消息呢容
     * @param whoSend    发送人
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveHistory(Integer sendType, Long bizId, String userId, Long employeeId, Integer type, String content, Integer whoSend);

    /**
     * 转换消息实体类
     *
     * @param sysUser             平台信息
     * @param user                用户信息
     * @param imMsgBizUserHistory 消息历史记录
     * @return 消息转换输出类
     */
    MsgItem getUserPlatformMsgItem(SysUser sysUser, User user, ImMsgBizUserHistory imMsgBizUserHistory);

    /**
     * 转换消息实体类
     *
     * @param shopDetail          商家信息
     * @param user                用户信息
     * @param imMsgBizUserHistory 消息历史记录
     * @return 消息转换输出类
     */
    MsgItem getUserShopMsgItem(ShopDetail shopDetail, User user, ImMsgBizUserHistory imMsgBizUserHistory);

    /**
     * 获取用户与平台的聊天记录
     *
     * @param sysUser     平台信息
     * @param messageInfo 信息载体
     * @param bizId       平台或店铺id
     * @param userId      用户id
     * @param user        用户信息
     * @return 翻页聊天记录
     */
    Page<MsgItem> getUserPlatformHistory(SysUser sysUser, MessageInfo messageInfo, Long bizId, String userId, User user);

    /**
     * 获取用户与商家的聊天记录
     *
     * @param shopDetail  商家信息
     * @param messageInfo 信息载体
     * @param bizId       平台或店铺id
     * @param userId      用户id
     * @param user        用户信息
     * @return 翻页聊天记录
     */
    Page<MsgItem> getUserShopHistory(ShopDetail shopDetail, MessageInfo messageInfo, Long bizId, String userId, User user);

    /**
     * 获取商家与用户的聊天记录
     *
     * @param shopUser    商家信息
     * @param messageInfo 信息载体
     * @param user        用户信息
     * @param shopDetail 店铺详情
     * @return 翻页聊天记录
     */
    Page<MsgItem> getShopUserHistory(YamiShopUser shopUser, MessageInfo messageInfo, User user, ShopDetail shopDetail);

    /**
     * 获取平台与用户的聊天记录
     *
     * @param sysUser     平台信息
     * @param messageInfo 信息载体
     * @param user        用户信息
     * @param sysUser2
     * @return 翻页聊天记录
     */
    Page<MsgItem> getPlatformUserHistory(YamiSysUser sysUser, MessageInfo messageInfo, User user, SysUser sysUser2);

    /**
     * 用户标记已读
     *
     * @param messageInfo 信息载体
     * @param bizId       平台或店铺id
     * @param userId      用户id
     * @return 消息历史记录实体类列表
     */
    List<ImMsgBizUserHistory> markUserPlatformRead(MessageInfo messageInfo, Long bizId, String userId);

    /**
     * 用户标记已读
     *
     * @param messageInfo 信息载体
     * @param bizId       平台或店铺id
     * @param userId      用户id
     * @return 消息历史记录实体类列表
     */
    List<ImMsgBizUserHistory> markUserShopRead(MessageInfo messageInfo, Long bizId, String userId);

    /**
     * 商家标记已读
     *
     * @param messageInfo 信息载体
     * @param shopUser    商家信息
     * @param userId      用户id
     * @return 消息历史记录实体类列表
     */
    List<ImMsgBizUserHistory> markShopUserRead(MessageInfo messageInfo, YamiShopUser shopUser, String userId);

    /**
     * 平台标记已读
     *
     * @param messageInfo 信息载体
     * @param sysUser     平台信息
     * @param userId      用户id
     * @return 消息历史记录实体类列表
     */
    List<ImMsgBizUserHistory> markPlatformUserRead(MessageInfo messageInfo, YamiSysUser sysUser, String userId);

    /**
     * 保存用户与平台的聊天记录
     *
     * @param messageInfo 信息载体
     * @param bizId       平台或店铺id
     * @param userId      用户id
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveUserPlatformHistory(MessageInfo messageInfo, Long bizId, String userId);

    /**
     * 保存用户与商家的聊天记录
     *
     * @param messageInfo 信息载体
     * @param bizId       平台或店铺id
     * @param userId      用户id
     * @param employeeId  员工id
     * @param status
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveUserShopHistory(MessageInfo messageInfo, Long bizId, String userId, Long employeeId, Integer status);

    /**
     * 保存商家与用户的聊天记录
     *
     * @param messageInfo 信息载体
     * @param shopUser    商家信息
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveShopUserHistory(MessageInfo messageInfo, YamiShopUser shopUser);

    /**
     * 保存平台与用户的聊天记录
     *
     * @param messageInfo 信息载体
     * @param sysUser     平台信息
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory savePlatformUserHistory(MessageInfo messageInfo, YamiSysUser sysUser);

    /**
     * 商家切换客服系统提醒
     *
     * @param shopUser     商家信息
     * @param shopEmployee 商家信息
     * @param user         用户信息
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveShopChangeEmployeeReply(YamiShopUser shopUser, ShopEmployee shopEmployee, User user);

    /**
     * 平台切换客服系统提醒
     *
     * @param sysUser 商家信息
     * @param user    用户信息
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory savePlatformChangeEmployeeReply(SysUser sysUser, User user);
}
